+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
+Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
+
+ [ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
+
+ * acconfig.h configure.in gdk/gdkim.c: Add configure
+ flag for disabling XRegisterIMInstantiateCallback(), default
+ it to off for Solaris. Always try to open the
+ input method immediately, and only if that fails,
+ register than instantiate callback.
+
+ * gdk/gdkentry.c: Some tweaks to make sure that we
+ only get and set the IC attributes when appropriate.
+
+Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtkfilesel.c (open_user_dir): Patch from
+ Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
+ use g_get_home_dir() instead of calling getpwuid()
+ ourselves.
+
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
/* Define to enable POSIX threading awareness */
#undef USE_PTHREADS
+#undef XIM_INST_IS_MISSING_OR_STRANGE
+
#undef XINPUT_NONE
#undef XINPUT_GXI
#undef XINPUT_XFREE
AC_ARG_WITH(glib, [ --with-glib=DIR Use uninstalled copy of glib])
AC_ARG_ENABLE(xim, [ --enable-xim support XIM [default=yes]],
, enable_xim="yes")
+AC_ARG_ENABLE(xim_inst, [ --disable-xim-inst does not use xim instantiate callback],
+ , enable_xim_inst="maybe")
AC_ARG_WITH(locale, [ --with-locale=LOCALE locale name you want to use ])
AC_ARG_WITH(xinput, [ --with-xinput=[no/gxi/xfree] support XInput ])
AC_CHECK_LIB(X11, XUnregisterIMInstantiateCallback,
: ,
- enable_xim=no,
+ enable_xim_inst="no",
$x_libs)
+# On Solaris, calling XRegisterIMInstantiateCallback seems to
+# cause an immediate segfault, so we disable it, unless
+# the user specifically forces it to be on.
+
+if test x$enable_xim_inst = xmaybe ; then
+ case host in
+ *-*-solaris*)
+ enable_xim_inst="no"
+ ;;
+ *)
+ enable_xim_inst="yes"
+ ;;
+ esac
+fi
+
if test "x$enable_xim" = "xyes"; then
GTK_XIM_FLAGS="-DUSE_XIM"
+ if test "x$enable_xim_inst" = "xno"; then
+ AC_DEFINE(XIM_INST_IS_MISSING_OR_STRANGE)
+ fi
fi
x_cflags="$X_CFLAGS"
gpointer value;
} GdkImArg;
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void gdk_im_instantiate_cb (Display *display,
XPointer client_data,
XPointer call_data);
+#endif
static void gdk_im_destroy_cb (XIM im,
XPointer client_data,
XPointer call_data);
-
+static gint gdk_im_real_open (void);
static void gdk_ic_real_new (GdkIC *ic);
static GdkICAttributesType gdk_ic_real_set_attr (GdkIC *ic,
private->xic = NULL;
}
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
gdk_im_instantiate_cb, NULL);
+#endif
}
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void
gdk_im_instantiate_cb (Display *display,
XPointer client_data, XPointer call_data)
{
- XIMCallback destroy_cb;
- GList *node;
-
GDK_NOTE (XIM, g_message ("New IM is instantiated."));
if (display != gdk_display)
return;
- XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
- gdk_im_instantiate_cb, NULL);
+ gdk_im_real_open ();
+
+ if (xim_im != NULL)
+ XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
+ gdk_im_instantiate_cb, NULL);
+}
+#endif
+
+static gint
+gdk_im_real_open (void)
+{
+ XIMCallback destroy_cb;
+ GList *node;
xim_im = XOpenIM (GDK_DISPLAY(), NULL, NULL, NULL);
if (xim_im == NULL)
- GDK_NOTE (XIM, g_warning ("Unable to open open IM."));
-
- destroy_cb.callback = gdk_im_destroy_cb;
- destroy_cb.client_data = NULL;
- XSetIMValues (xim_im, XNDestroyCallback, &destroy_cb, NULL);
+ {
+ GDK_NOTE (XIM, g_warning ("Unable to open IM."));
+ return FALSE;
+ }
+ else
+ {
+ destroy_cb.callback = gdk_im_destroy_cb;
+ destroy_cb.client_data = NULL;
+ if (NULL != XSetIMValues (xim_im, XNDestroyCallback, &destroy_cb, NULL))
+ GDK_NOTE (XIM, g_warning ("Could not set destroy callback to IM. Be careful to not destroy your input method."));
- XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
+ XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
- for (node = xim_ic_list; node != NULL; node = g_list_next(node))
- {
- GdkICPrivate *private = (GdkICPrivate *) (node->data);
- if (private->xic == NULL)
- gdk_ic_real_new ((GdkIC *)private);
+ for (node = xim_ic_list; node != NULL; node = g_list_next(node))
+ {
+ GdkICPrivate *private = (GdkICPrivate *) (node->data);
+ if (private->xic == NULL)
+ gdk_ic_real_new ((GdkIC *)private);
+ }
+ return TRUE;
}
}
if (!(xim_best_allowed_style & GDK_IM_STATUS_MASK))
gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS);
+ if (gdk_im_real_open ())
+ return TRUE;
+
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
- gdk_im_instantiate_cb, NULL);
+ gdk_im_instantiate_cb, NULL);
+#endif
- return (xim_im != NULL);
+ return FALSE;
}
void
gpointer value;
} GdkImArg;
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void gdk_im_instantiate_cb (Display *display,
XPointer client_data,
XPointer call_data);
+#endif
static void gdk_im_destroy_cb (XIM im,
XPointer client_data,
XPointer call_data);
-
+static gint gdk_im_real_open (void);
static void gdk_ic_real_new (GdkIC *ic);
static GdkICAttributesType gdk_ic_real_set_attr (GdkIC *ic,
private->xic = NULL;
}
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
gdk_im_instantiate_cb, NULL);
+#endif
}
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void
gdk_im_instantiate_cb (Display *display,
XPointer client_data, XPointer call_data)
{
- XIMCallback destroy_cb;
- GList *node;
-
GDK_NOTE (XIM, g_message ("New IM is instantiated."));
if (display != gdk_display)
return;
- XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
- gdk_im_instantiate_cb, NULL);
+ gdk_im_real_open ();
+
+ if (xim_im != NULL)
+ XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
+ gdk_im_instantiate_cb, NULL);
+}
+#endif
+
+static gint
+gdk_im_real_open (void)
+{
+ XIMCallback destroy_cb;
+ GList *node;
xim_im = XOpenIM (GDK_DISPLAY(), NULL, NULL, NULL);
if (xim_im == NULL)
- GDK_NOTE (XIM, g_warning ("Unable to open open IM."));
-
- destroy_cb.callback = gdk_im_destroy_cb;
- destroy_cb.client_data = NULL;
- XSetIMValues (xim_im, XNDestroyCallback, &destroy_cb, NULL);
+ {
+ GDK_NOTE (XIM, g_warning ("Unable to open IM."));
+ return FALSE;
+ }
+ else
+ {
+ destroy_cb.callback = gdk_im_destroy_cb;
+ destroy_cb.client_data = NULL;
+ if (NULL != XSetIMValues (xim_im, XNDestroyCallback, &destroy_cb, NULL))
+ GDK_NOTE (XIM, g_warning ("Could not set destroy callback to IM. Be careful to not destroy your input method."));
- XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
+ XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
- for (node = xim_ic_list; node != NULL; node = g_list_next(node))
- {
- GdkICPrivate *private = (GdkICPrivate *) (node->data);
- if (private->xic == NULL)
- gdk_ic_real_new ((GdkIC *)private);
+ for (node = xim_ic_list; node != NULL; node = g_list_next(node))
+ {
+ GdkICPrivate *private = (GdkICPrivate *) (node->data);
+ if (private->xic == NULL)
+ gdk_ic_real_new ((GdkIC *)private);
+ }
+ return TRUE;
}
}
if (!(xim_best_allowed_style & GDK_IM_STATUS_MASK))
gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS);
+ if (gdk_im_real_open ())
+ return TRUE;
+
+#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
- gdk_im_instantiate_cb, NULL);
+ gdk_im_instantiate_cb, NULL);
+#endif
- return (xim_im != NULL);
+ return FALSE;
}
void
GtkEditable *editable = (GtkEditable *) widget;
GdkICAttributesType mask = 0;
+ if (editable->ic == NULL)
+ return;
+
gdk_ic_get_attr (editable->ic, editable->ic_attr,
GDK_IC_PREEDIT_FOREGROUND |
GDK_IC_PREEDIT_BACKGROUND |
= widget->style->base[GTK_STATE_NORMAL];
}
if ((gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION) &&
+ widget->style->font != NULL &&
+ widget->style->font->type == GDK_FONT_FONTSET &&
!gdk_font_equal (editable->ic_attr->preedit_fontset,
widget->style->font))
{